shallow copy [Java] 객체지향 프로그래밍 - 생성자 App 클래스를 예로 들어 인스턴스 생성하는 과정은 아래와 같아요. 컴파일을 할 때 소스 파일*.java의 클래스가 생성자가 하나도 없다면 컴파일러는 자동적으로 아래와 같은 생성자를 추가해서 컴파일해요. 아무 기능도 수행하지 않기 때문에 생성과 동시에 초기화가 필요한 인스턴스는 반드시 생성자를 선언해줘야 해요. 근데 만약에 매개변수가 있는, 기본 생성자가 아닌 생성자가 선언되어 있고, 기본 ... Object Oriented ProgrammingConstructordeep copyshallow copyOOPJavaConstructor [JS] 원시 값 vs 객체 원시 값을 변수에 할당하면 변수에는 실제 값이 저장된다. 객체를 변수에 할당하면 변수에는 참조 값이 저장된다. 원시 값을 가진 변수를 다른 변수에 할당하면 변수에는 원시 값이 복사된다. 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사된다. 불변성을 갖는 원시 값을 할당한 변수는 재할당 이외에 변수 값을 변경할 수 있는 방법이 없다. 🔰 Pass By Value(값에 의한 ... 원시 값frontendImmutabledeep copyTILpass-by-referencemutableshallow copy객체jspass by valueImmutable Shallow Copy vs Deep Copy feat.Spread Operator {...} source: Spread Operator는 Deep Copy를 만들어준다 하지만 데이터가 nested 되어 있을 경우에는 nested data는 shallow copy가 된다. 따라서 nested 되어있는 부분도 deep copy 하려면 {...a, b: {...b.foods}}이런식으로 또 한번의 Spread Operator를 행해 주어야 한다 source:... deep copyspread operatorES5shallow copyES5 Premitive & Reference (원시값과 참조값) String Boolean Primitive 🏐 단순히 값이 같으면 동일하게 판별 String은 Primitive(원시값)이다. 원시값의 모양이 같으면 같은 값으로 단순하게 판별한다. 🏐 할당된 값은 그대로 a가 10인 시점에서 b에 값을 한번 할당했기 때문에 a의 값이 변경되어도 다시 a를 할당하지 않는 한b는 변경되지 않는다. 🏐 변수 생성 과정 메모리에 { id: '1', count: ... referenceshallow copy참조값spread operatorpremitive원시값복사얕은복사 전개연산자premitive 객체의 복사, 불변성의 문제 실무에서 다음 a와 같은 구조의 배열을 복사해서 안의 프로퍼티 값을 변경하니 a의 불변성이 지켜지지 않는 문제가 발생했다. 배열 a를 전개 구문으로 복사한 b를 map을 이용해 안의 객체 first의 값을 바꿔보자. 그러면 a의 값 또한 변하면서 불변성이 지켜지지 않는다. 전개구문은 다음과 같은 특성이 있기 때문이다. Spread 문법은 배열을 복사할 때 1 레벨 깊이에서 효과적으로 동작합니... Array.prototype.slice.call()shallow copysliceSpread SyntaxArray.prototype.slice()deep copyArray.prototype.slice() [JS] Shallow Copy & Deep Copy 값을 복사하는 경우 새로운 변수에 값을 대입해주면 기존 변수는 원본이 되고 새로운 변수는 복사본이 되어 복사본을 변경하여도 원본이 변경되지 않는다. 이렇게 값을 복사하는 방식은 객체와 배열 복사에 적용되지 않는다. => 객체와 배열을 값 자체를 가지고 있는 것이 아니라 값이 들어 있는 주소를 가지고 있어서 주소가 복사되는 것이다!!! 이러한 문제를 해결하기 위해 Shallow Copy(얕은 ... deep copyshallow copyJavaScriptjsJavaScript
[Java] 객체지향 프로그래밍 - 생성자 App 클래스를 예로 들어 인스턴스 생성하는 과정은 아래와 같아요. 컴파일을 할 때 소스 파일*.java의 클래스가 생성자가 하나도 없다면 컴파일러는 자동적으로 아래와 같은 생성자를 추가해서 컴파일해요. 아무 기능도 수행하지 않기 때문에 생성과 동시에 초기화가 필요한 인스턴스는 반드시 생성자를 선언해줘야 해요. 근데 만약에 매개변수가 있는, 기본 생성자가 아닌 생성자가 선언되어 있고, 기본 ... Object Oriented ProgrammingConstructordeep copyshallow copyOOPJavaConstructor [JS] 원시 값 vs 객체 원시 값을 변수에 할당하면 변수에는 실제 값이 저장된다. 객체를 변수에 할당하면 변수에는 참조 값이 저장된다. 원시 값을 가진 변수를 다른 변수에 할당하면 변수에는 원시 값이 복사된다. 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사된다. 불변성을 갖는 원시 값을 할당한 변수는 재할당 이외에 변수 값을 변경할 수 있는 방법이 없다. 🔰 Pass By Value(값에 의한 ... 원시 값frontendImmutabledeep copyTILpass-by-referencemutableshallow copy객체jspass by valueImmutable Shallow Copy vs Deep Copy feat.Spread Operator {...} source: Spread Operator는 Deep Copy를 만들어준다 하지만 데이터가 nested 되어 있을 경우에는 nested data는 shallow copy가 된다. 따라서 nested 되어있는 부분도 deep copy 하려면 {...a, b: {...b.foods}}이런식으로 또 한번의 Spread Operator를 행해 주어야 한다 source:... deep copyspread operatorES5shallow copyES5 Premitive & Reference (원시값과 참조값) String Boolean Primitive 🏐 단순히 값이 같으면 동일하게 판별 String은 Primitive(원시값)이다. 원시값의 모양이 같으면 같은 값으로 단순하게 판별한다. 🏐 할당된 값은 그대로 a가 10인 시점에서 b에 값을 한번 할당했기 때문에 a의 값이 변경되어도 다시 a를 할당하지 않는 한b는 변경되지 않는다. 🏐 변수 생성 과정 메모리에 { id: '1', count: ... referenceshallow copy참조값spread operatorpremitive원시값복사얕은복사 전개연산자premitive 객체의 복사, 불변성의 문제 실무에서 다음 a와 같은 구조의 배열을 복사해서 안의 프로퍼티 값을 변경하니 a의 불변성이 지켜지지 않는 문제가 발생했다. 배열 a를 전개 구문으로 복사한 b를 map을 이용해 안의 객체 first의 값을 바꿔보자. 그러면 a의 값 또한 변하면서 불변성이 지켜지지 않는다. 전개구문은 다음과 같은 특성이 있기 때문이다. Spread 문법은 배열을 복사할 때 1 레벨 깊이에서 효과적으로 동작합니... Array.prototype.slice.call()shallow copysliceSpread SyntaxArray.prototype.slice()deep copyArray.prototype.slice() [JS] Shallow Copy & Deep Copy 값을 복사하는 경우 새로운 변수에 값을 대입해주면 기존 변수는 원본이 되고 새로운 변수는 복사본이 되어 복사본을 변경하여도 원본이 변경되지 않는다. 이렇게 값을 복사하는 방식은 객체와 배열 복사에 적용되지 않는다. => 객체와 배열을 값 자체를 가지고 있는 것이 아니라 값이 들어 있는 주소를 가지고 있어서 주소가 복사되는 것이다!!! 이러한 문제를 해결하기 위해 Shallow Copy(얕은 ... deep copyshallow copyJavaScriptjsJavaScript